#ifndef STUDENT_H
#define STUDENT_H
#include <QString>
#include <QObject>


class Student : public QObject
{
    Q_OBJECT
    // 增加元对象反射

    // 反射成员
    //                                                 MEMBER的作用是绑定一个成员
    // 想要将某个字段反射出去，要么设置读写访问器，要么就绑定一个成员
    Q_PROPERTY(QString Name READ getName WRITE setName MEMBER _name)

    // 反射函数
    // 先要让一个函数能够通过元对象调用有三种方案
    // 1、加signals(本真就是元对象才支持)
    // 2、加slots(本身就是元对象才支持)
    // 3、加Q_INVOKABLE

    // 反射类
    // 1、将这个类注册到源类型中
    // 2、将构造函数反射出去
    // 3、


    // 想要创建一个类需要的步骤
    // 1、需要类的信息(C++:  包含头文件  Qt: MetaObject)
    // 2、构造函数(C++: 没有写构造函数，会调用默认的构造函数  Qt: 构造函数必须声明为可调用(可反射))


public:
    // 生命构造函数为可反射
    Q_INVOKABLE Student(QObject* parent = nullptr);

public :
    QString getName();
    void setName(const QString& name);
    Q_INVOKABLE void func();

private :
    QString _name;
};

#endif // STUDENT_H
